package com.mentalhealth.diary.service;

import com.mentalhealth.diary.dto.*;
import com.mentalhealth.diary.vo.LoginVO;

/**
 * 认证服务接口
 */
public interface AuthService {
    
    /**
     * 发送注册验证码
     * @param sendCodeDTO 发送验证码请求
     */
    void sendRegisterCode(SendCodeDTO sendCodeDTO);
    
    /**
     * 提交注册
     * @param registerDTO 注册请求
     * @return 登录信息（包含token和会员信息）
     */
    LoginVO submitRegister(RegisterDTO registerDTO);
    
    /**
     * 发送登录验证码
     * @param sendCodeDTO 发送验证码请求
     */
    void sendLoginCode(SendCodeDTO sendCodeDTO);
    
    /**
     * 手机号验证码登录
     * @param phoneLoginDTO 手机号登录请求
     * @return 登录信息
     */
    LoginVO phoneLogin(PhoneLoginDTO phoneLoginDTO);
    
    /**
     * 第三方登录
     * @param thirdLoginDTO 第三方登录请求
     * @return 登录信息
     */
    LoginVO thirdLogin(ThirdLoginDTO thirdLoginDTO);
    
    /**
     * 密码登录
     * @param passwordLoginDTO 密码登录请求
     * @return 登录信息
     */
    LoginVO passwordLogin(PasswordLoginDTO passwordLoginDTO);
    
    /**
     * 忘记密码
     * @param resetPasswordDTO 重置密码请求
     * @return 登录信息
     */
    LoginVO resetPassword(ResetPasswordDTO resetPasswordDTO);
    
    /**
     * 发送绑定手机号验证码
     * @param sendCodeDTO 发送验证码请求
     */
    void sendBindCode(SendCodeDTO sendCodeDTO);
    
    /**
     * 绑定手机号
     * @param userId 用户ID
     * @param bindPhoneDTO 绑定手机号请求
     * @return 登录信息
     */
    LoginVO bindPhone(Long userId, BindPhoneDTO bindPhoneDTO);
    
    /**
     * 刷新令牌
     * @param oldToken 旧令牌
     * @return 登录信息
     */
    LoginVO refreshToken(String oldToken);
}